#include <head.h>

int main(int argc, char const *argv[])
{
	if (argc != 2)
	{
		printf("格式错误%s [port]\n", argv[0]);
		exit(1);
	}
	// 1、创建用户数据报 套接字 SOCK_DGRAM
	int sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
	if (-1 == sock_fd)
	{
		ERRLOG("套接字错误");
		return 0;
	}
	// 2、填充服务器网络信息结构体
	// 填写信息结构体
	//  使用的是IRV4网络信息结构体，不用使用通用信息结构体
	struct sockaddr_in server_addr;
	// 清空结构体
	memset(&server_addr, 0, sizeof(server_addr));
	// 确定协议 选择IPV4
	server_addr.sin_family = AF_INET;
	// 端口号
	server_addr.sin_port = htons(atoi(argv[1])); // 端口号随便定
												 // IP地址
	server_addr.sin_addr.s_addr = inet_addr("0.0.0.0");
	// 信息结构体长度
	socklen_t server_addr_len = sizeof(server_addr);
	// 收发数据
	// 绑定
	if (-1 == bind(sock_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)))
	{
		ERRLOG("绑定失败");
		close(sock_fd);
		exit(-1);
	}
	// 缓冲区
	char buf[1024];
	memset(buf, 0, sizeof(buf));
	struct sockaddr_in client;
	socklen_t client_len = sizeof(client);
	while (1)
	{
		recvfrom(sock_fd, buf, sizeof(buf), 0, (struct sockaddr *)&client, &client_len);
		printf("接收%s\n", buf);
		// 接收
		sendto(sock_fd, buf, strlen(buf), 0, (struct sockaddr *)&client, client_len);
		memset(buf, 0, sizeof(buf));
	}
	close(sock_fd);
	return 0;
}